Concurrency Control এবং Deadlock Prevention হল ডেটাবেস ম্যানেজমেন্ট সিস্টেম (DBMS) এবং মাল্টি-থ্রেডেড অ্যাপ্লিকেশনের দুটি গুরুত্বপূর্ণ ধারণা, যা সিস্টেমে একাধিক প্রক্রিয়া বা থ্রেডের মধ্যে নিরাপত্তা এবং সঠিকতা বজায় রাখতে সাহায্য করে। এই দুটি প্রযুক্তি মূলত একটি ডেটাবেস বা সিস্টেমে একাধিক ইউজার বা থ্রেডের দ্বারা সমান্তরালভাবে ডেটা অ্যাক্সেস করার সময় ত্রুটি এবং অসম্পূর্ণতা থেকে বিরত রাখতে ব্যবহৃত হয়।
এই টেকনিকগুলি মূলত Transaction Management, Data Integrity, এবং System Stability নিশ্চিত করতে ব্যবহৃত হয়।
১. Concurrency Control (কনকারেন্সি কন্ট্রোল)
Concurrency Control একটি প্রক্রিয়া, যার মাধ্যমে একাধিক ট্রানজেকশন (বা থ্রেড) একই ডেটাবেস বা রিসোর্স অ্যাক্সেস করার সময় সিস্টেমের ইন্টিগ্রিটি (Integrity) নিশ্চিত করা হয়। একাধিক ইউজারের একযোগভাবে ডেটা অ্যাক্সেস করলে, সিস্টেমে Race Condition, Inconsistent State অথবা Lost Update সমস্যা হতে পারে। Concurrency Control টেকনিক এই সমস্যাগুলো দূর করার জন্য ব্যবহৃত হয়।
Concurrency Control Techniques:
Lock-Based Protocols (লক-ভিত্তিক প্রোটোকল):
- Shared Lock: যখন একটি ট্রানজেকশন কোনো ডেটার শুধুমাত্র পড়ার (read) উদ্দেশ্যে অ্যাক্সেস করে।
- Exclusive Lock: যখন একটি ট্রানজেকশন কোনো ডেটা আপডেট বা মুছে ফেলার (write) চেষ্টা করে।
Example:
- যদি এক ট্রানজেকশন
T1ডেটা পড়ার জন্যShared Lockনেয়ার পর অন্য একটি ট্রানজেকশনT2সেই ডেটা আপডেট করার চেষ্টা করে, তবেT2একটিExclusive Lockনিবে এবংT1পড়া শেষ না করা পর্যন্তT2কোনো পরিবর্তন করতে পারবে না।
Timestamp-Based Protocols (টাইমস্ট্যাম্প-ভিত্তিক প্রোটোকল):
এই প্রোটোকলে প্রতিটি ট্রানজেকশন একটি টাইমস্ট্যাম্প পায়, যা তার কার্যক্রমের অগ্রাধিকার নির্ধারণ করে। যদি দুটি ট্রানজেকশন একযোগভাবে একই ডেটা অ্যাক্সেস করার চেষ্টা করে, তাহলে টাইমস্ট্যাম্প ব্যবহার করে প্রথমে কনফ্লিক্ট সমাধান করা হয়।Example:
- ট্রানজেকশন
T1যদি টাইমস্ট্যাম্পেT2এর আগে থাকে, তবেT1এর কার্যক্রম প্রাধান্য পাবে।
- ট্রানজেকশন
- Optimistic Concurrency Control (অপটিমিস্টিক কনকারেন্সি কন্ট্রোল):
এই পদ্ধতিতে, ট্রানজেকশন শুরু হয় কোনো লক ছাড়া এবং ট্রানজেকশন শেষ হওয়ার সময় ডেটার কনফ্লিক্ট পরীক্ষা করা হয়। যদি কোনো কনফ্লিক্ট না থাকে, তবে ট্রানজেকশন কমপ্লিট হয়, কিন্তু যদি কনফ্লিক্ট পাওয়া যায়, তবে ট্রানজেকশনটি রোলব্যাক করা হয়। Multiversion Concurrency Control (MVCC):
MVCC হল একটি কৌশল, যেখানে প্রতিটি ডেটার বিভিন্ন সংস্করণ সংরক্ষিত থাকে এবং ট্রানজেকশনগুলি তাদের নিজস্ব সংস্করণগুলিতে কাজ করে। এতে একাধিক ট্রানজেকশন একে অপরের ডেটাকে প্রভাবিত না করে কার্যক্রম চালাতে পারে।Example:
- একটি ট্রানজেকশন যখন ডেটা পড়বে, তখন এটি কেবলমাত্র এক নির্দিষ্ট সংস্করণ পড়বে, অন্য ট্রানজেকশন যখন ডেটা আপডেট করবে তখন নতুন একটি সংস্করণ তৈরি হবে এবং পুরনো সংস্করণটি অক্ষুণ্ন থাকবে।
২. Deadlock Prevention (ডেডলক প্রতিরোধ)
Deadlock হল এমন একটি পরিস্থিতি যেখানে দুটি বা তার বেশি প্রক্রিয়া একে অপরের উপর নির্ভরশীল এবং একে অপরকে অপেক্ষা করছে, যার ফলে তারা কার্যক্রম চালাতে পারে না। ডেডলক রোধ করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে মাল্টি-থ্রেডেড এবং মাল্টি-ট্রানজেকশন সিস্টেমে।
Deadlock Prevention Techniques:
- Wait-Die and Wound-Wait Schemes:
এই কৌশলগুলি হল প্রক্রিয়া বা ট্রানজেকশনগুলির মধ্যে ডেডলক সৃষ্টির আগে কীভাবে একে অপরকে অপেক্ষা করতে দেওয়া হবে তা নির্ধারণ করে।- Wait-Die Scheme: যদি একটি নতুন ট্রানজেকশন পুরনো ট্রানজেকশনের জন্য অপেক্ষা করতে চায় এবং তার টাইমস্ট্যাম্প ছোট হয়, তবে সেটি অপেক্ষা করবে (Wait), অন্যথায় এটি রোলব্যাক হয়ে যাবে (Die)।
- Wound-Wait Scheme: যদি একটি নতুন ট্রানজেকশন পুরনো ট্রানজেকশনের জন্য অপেক্ষা করতে চায় এবং তার টাইমস্ট্যাম্প ছোট হয়, তবে এটি পুরনো ট্রানজেকশনটিকে কিল (Wound) করবে, অন্যথায় এটি অপেক্ষা করবে (Wait)।
Lock Ordering:
এই পদ্ধতিতে, সমস্ত ট্রানজেকশন একটি নির্দিষ্ট লক অর্ডার অনুসরণ করবে। একাধিক ট্রানজেকশন একই রিসোর্স অ্যাক্সেস করতে চাইলে, তারা পূর্বনির্ধারিত অর্ডারের ভিত্তিতে অপেক্ষা করবে। এতে ডেডলক হওয়ার সম্ভাবনা অনেকটাই কমে যায়।Example:
- যদি ট্রানজেকশন A প্রথমে
Lock1নেয় এবং তারপরLock2নেয়, তবে ট্রানজেকশন B শুধুমাত্রLock2এর জন্য অপেক্ষা করবে এবং পরবর্তীতেLock1নিতে পারবে।
- যদি ট্রানজেকশন A প্রথমে
- Resource Allocation Graph (RAG):
RAG একটি গ্রাফের মাধ্যমে ডেডলকের নির্ণয় এবং প্রতিরোধের প্রক্রিয়া। প্রতিটি নোড (Resource, Transaction) এবং তাদের মধ্যে সম্পর্ক চিত্রিত হয়। যদি গ্রাফে একটি সাইকেল থাকে, তাহলে তা ডেডলক নির্দেশ করে। সাইকেল থাকলে, একটি প্রক্রিয়া রোলব্যাক করা হয়। - Timeouts:
একটি সাধারণ ডেডলক প্রতিরোধ কৌশল হল টাইমআউট ব্যবহারের মাধ্যমে, যেখানে প্রক্রিয়া বা ট্রানজেকশন কিছু নির্দিষ্ট সময়ের জন্য অপেক্ষা করবে এবং সময় শেষ হলে রোলব্যাক হয়ে যাবে। - Prevention by Transaction Ordering:
সমস্ত ট্রানজেকশনগুলি নির্দিষ্ট অর্ডারে সম্পাদন করতে হবে। এটি নিশ্চিত করে যে একটি ট্রানজেকশন কখনও অন্য একটি ট্রানজেকশন দ্বারা ব্লক হবে না, যার ফলে ডেডলকের ঝুঁকি কমে যায়।
৩. Deadlock Detection and Recovery
ডেডলক প্রতিরোধ করার পাশাপাশি, Deadlock Detection and Recovery কৌশল ব্যবহৃত হতে পারে, যেখানে সিস্টেম ডেডলক সনাক্ত করে এবং রিকভারি প্রক্রিয়া চালায়।
- Deadlock Detection:
ডেডলক সনাক্ত করার জন্য, একটি Wait-for Graph ব্যবহৃত হয়, যা সমস্ত ট্রানজেকশনের অপেক্ষা সম্পর্ক প্রদর্শন করে। যদি গ্রাফে একটি সাইকেল থাকে, তবে ডেডলক ঘটেছে। - Deadlock Recovery:
ডেডলক সনাক্ত হলে, রিকভারি প্রক্রিয়া শুরু হয়। সাধারণত, সিস্টেম একটি ট্রানজেকশন রোলব্যাক করে এবং ডেডলক সৃষ্টিকারী প্রক্রিয়া থেকে মুক্তি পায়।
সারসংক্ষেপ
- Concurrency Control ডেটাবেসে একাধিক ট্রানজেকশনের সমান্তরাল এক্সিকিউশন নিশ্চিত করে এবং Lock-Based Protocols, Timestamp-Based Protocols, এবং Optimistic Concurrency Control ব্যবহার করে ডেটার ইন্টিগ্রিটি বজায় রাখে।
- Deadlock Prevention techniques যেমন Wait-Die, Wound-Wait, Lock Ordering, এবং Resource Allocation Graph ডেডলক প্রতিরোধ করে এবং সিস্টেমের কার্যক্ষমতা বজায় রাখে।
- Deadlock Detection and Recovery সিস্টেমে ডেডলক সনাক্ত করে এবং রিকভারি প্রক্রিয়া ব্যবহারের মাধ্যমে ডেডলক সমাধান করে।
এগুলি সকলই কিডিবি (KDB+) এবং অন্যান্য ডেটাবেস সিস্টেমে কার্যকরীভাবে প্রয়োগ করা হয়, বিশেষ করে যখন একাধিক ট্রানজেকশন বা প্রক্রিয়া একে অপরের সাথে সমান্তরালে কাজ করে।
Read more